package org.bee.cryptix;


import org.mindrot.jbcrypt.BCrypt;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * BCrypt工具类 不可逆,加密后密码为60位
 */
public class BCryptUtils {
    private static final Logger logger = LoggerFactory.getLogger(BCryptUtils.class);

    /**
     * 使用bcrypt散列密码。
     *
     * @param password 明文密码
     * @return 散列后的密码字符串
     */
    public static String encrypt(String password) {
        if (password == null){
            logger.error("加密的密码不能为空");
            throw new IllegalArgumentException("要加密的密码为空");
        }
        // 选择一个工作因子，数值越高，散列所需的时间越长
        // 通常使用12作为默认值
        int workFactor = 12;
        return BCrypt.hashpw(password, BCrypt.gensalt(workFactor));
    }

    /**
     * 校验明文密码是否与散列后的密码匹配。
     *
     * @param password 明文密码
     * @param hashedPassword 散列后的密码字符串
     * @return 如果明文密码匹配散列密码，返回true，否则返回false
     */
    public static boolean checkPW(String password, String hashedPassword) {
        return BCrypt.checkpw(password, hashedPassword);
    }

}